package utils

import (
	"fmt"
	"strconv"
	"strings"
)

// Atoi64 转换成整型int64
func Atoi64(s string, d ...int64) int64 {
	i, err := strconv.ParseInt(s, 10, 64)
	if err != nil {
		if len(d) > 0 {
			return d[0]
		} else {
			return 0
		}
	}

	return i
}

// Atoi 转换成整型
func Atoi(s string, d ...int) int {
	i, err := strconv.Atoi(s)
	if err != nil {
		if len(d) > 0 {
			return d[0]
		} else {
			return 0
		}
	}

	return i
}

// AtoI8  转成int8
func AtoI8(s string) int8 {
	return int8(Atoi(s))
}

// AtoI32  转成int32
func AtoI32(s string) int32 {
	return int32(Atoi(s))
}

// AtoI64  转成int64
func AtoI64(s string) int64 {
	return int64(Atoi(s))
}

// AtoI32  转成int32
func AtoUI32(s string) uint32 {
	return uint32(Atoi(s))
}

// AtoUi 转换成无符号整型
func AtoUi(s string) uint {
	return uint(Atoi64(s))
}

// Itoa 整型转字符串
func Itoa(i int) string {
	return strconv.Itoa(i)
}

// I64toa 整型转字符串
func I64toA(i int64) string {
	return Itoa(int(i))
}

// I32toa 整型转字符串
func I32toA(i int32) string {
	return Itoa(int(i))
}

// ToLow 转小写
func ToLow(s string) string {
	return strings.ToLower(strings.TrimSpace(s))
}

func StrToF64(s string) float64 {
	f, err := strconv.ParseFloat(s, 32)
	if err != nil {
		Printf("StrToF64:%s", err.Error())
	}
	return f
}

func StrToF32(s string) float32 {
	return float32(StrToF64(s))
}

func I32Join(i1, i2 int32, symbol string) string {
	return fmt.Sprintf("%v%s%v", i1, symbol, i2)
}

func StrJoin(s1, s2 string, symbol string) string {
	return fmt.Sprintf("%v%s%v", s1, symbol, s2)
}

func I64StrJoin(s1 int64, s2 string, symbol string) string {
	return fmt.Sprintf("%d%s%v", s1, symbol, s2)
}
